#2020年省赛-程序设计题 数字三角形
n = int(input())
a = [list(map(int, input().split())) for _ in range(n)]
# 从第二行开始，循环遍历计算到每一行的和的最大值
for i in range(1, n):
    for j in range(i + 1):
        if j == 0:  # 最左端节点，只能从上一行最左端过来
            a[i][j] += a[i-1][j]
        elif j == i:  # 最右端节点，只能从上一行最右端过来
            a[i][j] += a[i-1][j-1]
        else:  # 中间节点，取上一行相邻两个节点中的最大值
            a[i][j] += max(a[i-1][j-1:j+1])

# n & 1 二进制按位与操作，效果等效于判断奇偶性
# 当n为奇数时，二进制最后一位为1，n & 1 = 1 → True
# 当n为偶数时，二进制最后一位为0，n & 1 = 0 → False
if n & 1:  # 如果是奇数行，返回最中间的值
    print(a[-1][n//2])
else:
    print(max(a[-1][n//2-1], a[-1][n//2]))
# 通过这种输出位置的限制，代码保证了路径中左右步数差不超过1的条件。
# 动态规划过程中虽然计算了所有路径，
# 但最终只选取符合终点位置要求的路径中的最大值。